from pyecharts import options as opts
from pyecharts.charts import Sankey

node = [
    {'name': '创建订单-1828'}, {'name': '未支付-935'}, {'name': '已支付-893'},
    {'name': '未发货-114'}, {'name': '已发货-779'}, {'name': '未收货-111'},
    {'name': '已收货-669'}, {'name': '未删除-813'}, {'name': '已删除-122'},
    {'name': '已退款-51'}, {'name': '未退款-65'}, {'name': '待收货-109'}, {'name': '订单完成-601'},
]  # 此处罗列各分支名称，后面的数字代表具体的量值(注：因为pyecharts无法直接显示value，所以需要这样标注)。
link = [
    {'source': '创建订单-1828', 'target': '未支付-935', 'value': 935},
    {'source': '创建订单-1828', 'target': '已支付-893', 'value': 893},
    {'source': '未支付-935', 'target': '未删除-813', 'value': 813},
    {'source': '未支付-935', 'target': '已删除-122', 'value': 122},
    {'source': '已支付-893', 'target': '未发货-114', 'value': 114},
    {'source': '已支付-893', 'target': '已发货-779', 'value': 779},
    {'source': '未发货-114', 'target': '已退款-51', 'value': 49},
    {'source': '未发货-114', 'target': '未退款-65', 'value': 65},
    {'source': '已发货-779', 'target': '未收货-111', 'value': 111},
    {'source': '已发货-779', 'target': '已收货-669', 'value': 668},
    {'source': '未收货-111', 'target': '待收货-109', 'value': 109},
    {'source': '未收货-111', 'target': '已退款-51', 'value': 2},
    {'source': '已收货-669', 'target': '订单完成-601', 'value': 601}, ]

pic = (
    Sankey().add('',
                 node,
                 link,
                 linestyle_opt=opts.LineStyleOpts(opacity=0.3, curve=0.5, color='source'),
                 label_opts=opts.LabelOpts(position='right'),
                 node_gap=30,  # 节点之间的距离,(查看垂直图片的操作orient="vertical")

                 ).set_global_opts(title_opts=opts.TitleOpts(title='电商订单报表一览图'))
)
pic.render('桑基图示意图.html')
pic.render_notebook()